{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "601743c8",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[['E:\\\\oo\\\\lab\\\\123\\\\csv\\\\4.5-1-1.csv', '0.1.0.1_4.5'],\n",
       " ['E:\\\\oo\\\\lab\\\\123\\\\csv\\\\4.5-1-2.csv', '0.1.0.2_4.5']]"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "class ExecuteCsv_rewrite:\n",
    "    def __init__(self,csv_files,title,word,save_path):\n",
    "        \n",
    "        self.save_path = save_path\n",
    "\n",
    "        df = pd.read_csv(csv_files[0],engine = \"python\")\n",
    "        for i in csv_files[1:]:\n",
    "            f2=open(i)#############自己修改###########\n",
    "            df2 = pd.read_csv(f2)#############自己修改###########\n",
    "            df = pd.concat([df,df2])\n",
    "        count = 0\n",
    "        df= df.reset_index(drop=True)\n",
    "        index_dict ={}\n",
    "        \n",
    "        dataMat = []\n",
    "        self.max_limit = min(30,int(df[\"tb\"].max())+5)\n",
    "        K = len(df['GRID_CODE'].value_counts())\n",
    "        for i in range(len(df)):\n",
    "            if df.GRID_CODE[i] not in index_dict:\n",
    "                index_dict[df.GRID_CODE[i]] = count\n",
    "                count += 1\n",
    "\n",
    "            x = int((float(df.tb[i])/0.5 + 1))\n",
    "            if df.E_sum[i] >0 :\n",
    "                y = int((float(df.E_sum[i])/(5.893*1.8099*0.5) + 1))\n",
    "            else:\n",
    "                y = int((float(df.E_sum[i])/(5.893*1.8099*0.5) ))\n",
    "            x_ret = x*0.5\n",
    "            y_ret = y*(5.893*1.8099*0.5)\n",
    "                \n",
    "            retlist = [x_ret,y_ret] + [0] * K\n",
    "            retlist[index_dict[df.GRID_CODE[i]]+2] = 1\n",
    "            dataMat.append(retlist)\n",
    "                \n",
    "        df = pd.DataFrame(dataMat)\n",
    "        self.columns =  [\"tb\",\"e_sum\"] + list(index_dict.keys())\n",
    "        df.columns  = self.columns\n",
    "        self.word = word\n",
    "        groupedMat = df.groupby([df[\"tb\"],df[\"e_sum\"]]).sum()\n",
    "        groupedMat.to_csv(self.save_path + \"\\\\\" + (title.replace(\"/\",\"_\")) + word[:-1] + \"_格子图占比.csv\") \n",
    "        self.lat_csv = self.save_path + \"\\\\\" + (title.replace(\"/\",\"_\")) + self.word[:-1] + \"_格子图占比.csv\"\n",
    "        \n",
    "    def set_save_path(self,save_path):\n",
    "        try : \n",
    "            os.mkdir(save_path)\n",
    "        except:\n",
    "            pass\n",
    "        self.save_path = save_path\n",
    "        \n",
    "    def start_execute(self,title,csv1,max_limit,k,tb,E,sign):\n",
    "\n",
    "        f5=open(csv1)#############自己修改###########\n",
    "        df = pd.read_csv(f5)#############自己修改###########\n",
    "        \n",
    "        tb_count_list = [[0,0,0,0,0,0,0] for i in range(12)]\n",
    "        for i in range(len(df)):\n",
    "            if df.E_sum[i] >  4*5.893*1.8099* df.tb[i]: a = 0 #0.25\n",
    "\n",
    "            elif df.E_sum[i] >  2*5.893*1.8099* df.tb[i]: a = 1 #0.5\n",
    "\n",
    "            elif df.E_sum[i] >  5.893*1.8099* df.tb[i]: a = 2\n",
    "            elif df.E_sum[i] >  (1/3)*5.893*1.8099* df.tb[i] :a = 3\n",
    "            elif df.E_sum[i] >= 0: a = 4\n",
    "            elif df.E_sum[i] >  -(1/3)*5.893*1.8099* df.tb[i] :a = 5\n",
    "            elif df.E_sum[i] >  -0.5*5.893*1.8099* df.tb[i]: a = 6 #4\n",
    "            elif df.E_sum[i] >  -(3/5)*5.893*1.8099* df.tb[i] :a = 7 # 5\n",
    "            elif df.E_sum[i] >  -(2/3)*5.893*1.8099* df.tb[i] :a = 8 # 6\n",
    "            elif df.E_sum[i] >  -5.893*1.8099* df.tb[i]: a = 9 # p = 0\n",
    "            else : a = 10\n",
    "\n",
    "            if df.tb[i] <2: b = 0\n",
    "            elif df.tb[i]<6: b = 1\n",
    "            elif df.tb[i]<10: b = 2\n",
    "            elif df.tb[i]<14: b = 3\n",
    "            elif df.tb[i]<22: b = 4\n",
    "            elif df.tb[i]<30: b = 5\n",
    "\n",
    "            tb_count_list[a][b] += 1\n",
    "        self.tb_ratio = [[i/len(df.tb) for i in tb_count_list[j]] for j in range(12)]    \n",
    "\n",
    "        latticeImage = LatticeImage(self.lat_csv,title,self.tb_ratio,tb,E)\n",
    "        save_path = self.save_path + \"\\\\\" +\"群丛\" + csv1.split(\"\\\\\")[-1][:-4] +  \".svg\"\n",
    "        color = getcolor_dict[csv1.split(\"\\\\\")[-1][:-4]]\n",
    "        latticeImage.generate_image(save_path,self.columns,k,df,self.max_limit,color,sign)\n",
    "\n",
    "    def got_true_title(self,i = (\"\",\"\")):\n",
    "        tempr = ['温度交错带','极地苔原带','寒温带','中温带','暖温带','亚热带','热带']\n",
    "        if len(i[0]) == 1:\n",
    "            return self.title + \" \" + tempr[int(i[0])] + \" 地域\" + i[1]\n",
    "        else:\n",
    "            return self.title + \" \" + \"-\".join(tempr[int(j)] for j in i[0].split(\".\")) +\"交错带\" + \" 地域\" + i[1]\n",
    "        \n",
    "from scipy import optimize\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "\n",
    "import math\n",
    "\n",
    "def linefit(x,y):\n",
    "    N = float(len(x))\n",
    "    sx,sy,sxx,syy,sxy=0,0,0,0,0\n",
    "    for i in range(0,int(N)):\n",
    "        sx  += x[i]\n",
    "        sy  += y[i]\n",
    "        sxx += x[i]*x[i]\n",
    "        syy += y[i]*y[i]\n",
    "        sxy += x[i]*y[i]\n",
    "    a = (sy*sx/N -sxy)/( sx*sx/N -sxx)\n",
    "    b = (sy - a*sx)/N\n",
    "    r = abs(sy*sx/N-sxy)/math.sqrt((sxx-sx*sx/N)*(syy-sy*sy/N))\n",
    "    return a,b,r\n",
    "\n",
    "\n",
    "\n",
    "def auto_curve(df,rg,keyword): \n",
    "    x = np.array(df.tb)\n",
    "    y = np.array(df.E_sum)\n",
    "    \n",
    "    line1 = [linefit(x,y)] \n",
    "    if keyword == \"斜\":\n",
    "        k,b,r = line1[0]\n",
    "        return {'k_list': \n",
    "                  [{'k':k, 'b': b, 'r': r, 'type': 'normal'}],\n",
    "                  'writel': {0: (0, 30), 1: (0, 30), 2: (0, 30)}}\n",
    "    elif keyword == \"斜斜\":\n",
    "        line2,cr1 = get_2_line(x,y)\n",
    "        k1,b1,r1 = line2[0]\n",
    "        k2,b2,r2 = line2[1]\n",
    "        return {'k_list': \n",
    "                  [{'k':k1, 'b': b1, 'r': r1, 'type': 'normal'},\n",
    "                   {'k':k2, 'b': b2, 'r': r2, 'type': 'normal'},],\n",
    "                  'writel': {0: (0, cr1[0]), 1: (cr1[0], 30), 2: (0, 30)}}\n",
    "    \n",
    "    \n",
    "    if not rg and keyword:\n",
    "        if keyword == \"水\":\n",
    "            return {'k_list': \n",
    "                      [{'k':0, 'b': np.mean(y), 'r': 0, 'type': 'horizon'}],\n",
    "                      'writel': {0: (0, 30), 1: (0, 30), 2: (0, 30)}}\n",
    "        if keyword == \"垂\":\n",
    "            return {'k_list': \n",
    "                      [{'k':np.mean(x), 'b': 0, 'r': 0, 'type': 'vertical'}],\n",
    "                      'writel': {0: (0, 30), 1: (0, 30), 2: (0, 30)}}        \n",
    "    elif len(rg) == 1:\n",
    "        p1,p2 = [(x[i],y[i]) for i in range(len(df)) if x[i] < rg[0]],[(x[i],y[i]) for i in range(len(df)) if x[i] >= rg[0]]\n",
    "        x1,y1 = [i[0] for i in p1],[i[1] for i in p1]\n",
    "        x2,y2 = [i[0] for i in p2],[i[1] for i in p2]\n",
    "        if keyword == \"水斜\":\n",
    "            line2 = [[0,np.mean(y1),linefit(x1,y1)[2]],linefit(x2,y2)]\n",
    "            k1,b1,r1 = line2[0]\n",
    "            k2,b2,r2 = line2[1]\n",
    "            split = (b1-b2)/(k2-k1) \n",
    "            return  {'k_list': \n",
    "                  [{'k':k1, 'b': b1, 'r': r1, 'type': 'horizon'},\n",
    "                   {'k':k2, 'b': b2, 'r': r2, 'type': 'normal'},],\n",
    "                  'writel': {0: (0, split), 1: (split, 30), 2: (0, 30)}}\n",
    "        if keyword == \"斜水\":\n",
    "            line2 = [linefit(x1,y1),[0,np.mean(y2),linefit(x2,y2)[2]]]\n",
    "            k1,b1,r1 = line2[0]\n",
    "            k2,b2,r2 = line2[1]\n",
    "            split = (b1-b2)/(k2-k1) \n",
    "            return  {'k_list': \n",
    "                  [{'k':k1, 'b': b1, 'r': r1, 'type': 'normal'},\n",
    "                   {'k':k2, 'b': b2, 'r': r2, 'type': 'horizon'},],\n",
    "                  'writel': {0: (0, split), 1: (split, 30), 2: (0, 30)}}\n",
    "        if keyword == \"上垂斜\":\n",
    "            line2 = [None,linefit(x2,y2)]\n",
    "            k2,b2,r2 = line2[1]\n",
    "            line2[0] = [rg[0],k2*rg[0]+b2,0]\n",
    "            split = rg[0]\n",
    "            k1,b1,r1 = line2[0]\n",
    "            return  {'k_list': \n",
    "                  [{'k':k1, 'b': b1, 'r': r1, 'type': 'up_vertical'},\n",
    "                   {'k':k2, 'b': b2, 'r': r2, 'type': 'normal'},],\n",
    "                  'writel': {0: (0, split), 1: (split, 30), 2: (0, 30)}}\n",
    "        if keyword == \"下垂斜\":\n",
    "            line2 = [None,linefit(x2,y2)]\n",
    "            k2,b2,r2 = line2[1]\n",
    "            line2[0] = [rg[0],k2*rg[0]+b2,0]\n",
    "            split = rg[0]\n",
    "            k1,b1,r1 = line2[0]\n",
    "            k2,b2,r2 = line2[1]\n",
    "            return  {'k_list': \n",
    "                  [{'k':k1, 'b': b1, 'r': r1, 'type': 'down_vertical'},\n",
    "                   {'k':k2, 'b': b2, 'r': r2, 'type': 'normal'},],\n",
    "                  'writel': {0: (0, split), 1: (split, 30), 2: (0, 30)}}\n",
    "        if keyword == \"斜上垂\":\n",
    "            line2 = [linefit(x1,y1),None]\n",
    "            k2,b2,r2 = line2[0]\n",
    "            line2[1] = [rg[0],k2*rg[0]+b2,0]\n",
    "            split = rg[0]\n",
    "            k1,b1,r1 = line2[0]\n",
    "            k2,b2,r2 = line2[1]\n",
    "            return  {'k_list': \n",
    "                  [{'k':k1, 'b': b1, 'r': r1, 'type': 'normal'},\n",
    "                   {'k':k2, 'b': b2, 'r': r2, 'type': 'up_vertical'},],\n",
    "                  'writel': {0: (0, split), 1: (split, 30), 2: (0, 30)}}\n",
    "        if keyword == \"斜下垂\":\n",
    "            line2 = [linefit(x1,y1),None]\n",
    "            k2,b2,r2 = line2[0]\n",
    "            line2[1] = [rg[0],k2*rg[0]+b2,0]\n",
    "            split = rg[0]\n",
    "            k1,b1,r1 = line2[0]\n",
    "            k2,b2,r2 = line2[1]\n",
    "            return  {'k_list': \n",
    "                  [{'k':k1, 'b': b1, 'r': r1, 'type': 'normal'},\n",
    "                   {'k':k2, 'b': b2, 'r': r2, 'type': 'down_vertical'},],\n",
    "                  'writel': {0: (0, split), 1: (split, 30), 2: (0, 30)}}\n",
    "    elif len(rg) == 2:\n",
    "        p1,p2,p3 =( [(x[i],y[i]) for i in range(len(df)) if x[i] < rg[0]],\n",
    "                    [(x[i],y[i]) for i in range(len(df)) if (rg[1] > x[i] >= rg[0])],\n",
    "                    [(x[i],y[i]) for i in range(len(df)) if x[i] >= rg[1]])\n",
    "            \n",
    "        x1,y1 = [i[0] for i in p1],[i[1] for i in p1]\n",
    "        x2,y2 = [i[0] for i in p2],[i[1] for i in p2]\n",
    "        x3,y3 = [i[0] for i in p3],[i[1] for i in p3]\n",
    "        if keyword == \"水斜斜\":\n",
    "            line3 = [[0,np.mean(y1),linefit(x1,y1)[2]],linefit(x2,y2),linefit(x3,y3)]\n",
    "            k1,b1,r1 = line3[0]\n",
    "            k2,b2,r2 = line3[1]    \n",
    "            k3,b3,r3 = line3[2]  \n",
    "            crossx1 = (b1-b2)/(k2-k1)\n",
    "            crossx2 = (b3-b2)/(k2-k3)\n",
    "            split = (b1-b2)/(k2-k1) \n",
    "            return {'k_list': \n",
    "                  [{'k':k1, 'b': b1, 'r': r1, 'type': 'horizon'},\n",
    "                   {'k':k2, 'b': b2, 'r': r2, 'type': 'normal'},\n",
    "                   {'k':k3, 'b': b3, 'r': r3, 'type': 'normal'},],\n",
    "                  'writel': {0: (0, crossx1), 1: (crossx1, crossx2), 2: (crossx2, 30)}}\n",
    "        if keyword == \"斜水斜\":\n",
    "            line3 =  [linefit(x1,y1),[0,np.mean(y2),linefit(x2,y2)[2]],linefit(x3,y3)]\n",
    "            k1,b1,r1 = line3[0]\n",
    "            k2,b2,r2 = line3[1]    \n",
    "            k3,b3,r3 = line3[2]  \n",
    "            crossx1 = (b1-b2)/(k2-k1)\n",
    "            crossx2 = (b3-b2)/(k2-k3)\n",
    "            split = (b1-b2)/(k2-k1) \n",
    "            return {'k_list': \n",
    "                  [{'k':k1, 'b': b1, 'r': r1, 'type': 'normal'},\n",
    "                   {'k':k2, 'b': b2, 'r': r2, 'type': 'horizon'},\n",
    "                   {'k':k3, 'b': b3, 'r': r3, 'type': 'normal'},],\n",
    "                  'writel': {0: (0, crossx1), 1: (crossx1, crossx2), 2: (crossx2, 30)}}\n",
    "        if keyword == \"斜斜水\":\n",
    "            line3 = [linefit(x1,y1),linefit(x2,y2),[0,np.mean(y3),linefit(x3,y3)[2]]]\n",
    "            k1,b1,r1 = line3[0]\n",
    "            k2,b2,r2 = line3[1]    \n",
    "            k3,b3,r3 = line3[2]  \n",
    "            crossx1 = (b1-b2)/(k2-k1)\n",
    "            crossx2 = (b3-b2)/(k2-k3)\n",
    "            split = (b1-b2)/(k2-k1) \n",
    "            return {'k_list': \n",
    "                  [{'k':k1, 'b': b1, 'r': r1, 'type': 'normal'},\n",
    "                   {'k':k2, 'b': b2, 'r': r2, 'type': 'normal'},\n",
    "                   {'k':k3, 'b': b3, 'r': r3, 'type': 'horizon'},],\n",
    "                  'writel': {0: (0, crossx1), 1: (crossx1, crossx2), 2: (crossx2, 30)}}\n",
    "\n",
    "    line1 = [linefit(x,y)]\n",
    "    \n",
    "    if len(df.tb) < 15:\n",
    "        k,b,r = line1[0]\n",
    "        return {'k_list': \n",
    "                  [{'k':k, 'b': b, 'r': r, 'type': 'normal'}],\n",
    "                  'writel': {0: (0, 30), 1: (0, 30), 2: (0, 30)}}\n",
    "    line2,cr1 = get_2_line(x,y)\n",
    "    line3,cr2,cr3 = get_3_line(x,y)\n",
    "    r1,r2,r3 = line1[0][2],sum([i[2] for i in line2 if not np.isnan(i[2])])/2,sum([i[2] for i in line3 if not np.isnan(i[2])])/3\n",
    "    \n",
    "    if (r1 > r2 and r1 > r3 ) or (r1 > 0.8) or (max(df.tb)-min(df.tb) < 0.6):\n",
    "        k,b,r = line1[0]\n",
    "        return {'k_list': \n",
    "                  [{'k':k, 'b': b, 'r': r, 'type': 'normal'}],\n",
    "                  'writel': {0: (0, 30), 1: (0, 30), 2: (0, 30)}}\n",
    "    if r2 > r3 and r2 > r1:\n",
    "        k1,b1,r1 = line2[0]\n",
    "        k2,b2,r2 = line2[1]\n",
    "        return {'k_list': \n",
    "                  [{'k':k1, 'b': b1, 'r': r1, 'type': 'normal'},\n",
    "                   {'k':k2, 'b': b2, 'r': r2, 'type': 'normal'},],\n",
    "                  'writel': {0: (0, cr1[0]), 1: (cr1[0], 30), 2: (0, 30)}}\n",
    "    \n",
    "    k1,b1,r1 = line3[0]\n",
    "    k2,b2,r2 = line3[1]    \n",
    "    k3,b3,r3 = line3[2]  \n",
    "    return {'k_list': \n",
    "                  [{'k':k1, 'b': b1, 'r': r1, 'type': 'normal'},\n",
    "                   {'k':k2, 'b': b2, 'r': r2, 'type': 'normal'},\n",
    "                   {'k':k3, 'b': b3, 'r': r3, 'type': 'normal'},],\n",
    "                  'writel': {0: (0, cr1[0]), 1: (cr1[0], cr2[0]), 2: (cr2[0], 30)}}\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "def piecewise2(x, x0, y0, k1, k2):\n",
    "    return np.piecewise(x, [x < x0], [lambda x:k1*x + y0-k1*x0, lambda x:k2*x + y0-k2*x0])\n",
    "\n",
    "def piecewise3(x,x0,x1,y0,y1,k0,k1):\n",
    "    return np.piecewise(x , [x <= x0, np.logical_and(x0<x, x<= x1),x>x1] ,\n",
    "                        [lambda x:k0*(x-x0) + y0,#根据点斜式构建函数\n",
    "                         lambda x:(x-x0)*(y1-y0)/(x1-x0)+y0,#根据两点式构建函数\n",
    "                        lambda x:k1*(x-x1) + y1])\n",
    "\n",
    "def get_2_line(x,y):\n",
    "    perr_min = np.inf\n",
    "    p_best = None\n",
    "    for n in range(100):\n",
    "        k = np.random.rand(4)*20\n",
    "        try:\n",
    "            p,e = optimize.curve_fit(piecewise2, x, y,p0=k)\n",
    "        except:\n",
    "            continue\n",
    "        perr = np.sum(np.abs(y-piecewise2(x, *p)))\n",
    "        if(perr < perr_min):\n",
    "            perr_min = perr\n",
    "            p_best = p\n",
    "    x0, y0, k1, k2 = p_best\n",
    "    k1,b1,k2,b2 = k1,y0-k1*x0,k2,y0-k2*x0\n",
    "    x1,x2,y1,y2 = [],[],[],[]\n",
    "    \n",
    "    crossx,crossy = (b1-b2)/(k2-k1) , ((b1-b2)/(k2-k1)) *k1 + b1\n",
    "    for i in range(len(x)):\n",
    "        if x[i] < crossx:\n",
    "            x1.append(x[i])\n",
    "            y1.append(y[i])\n",
    "        else:\n",
    "            x2.append(x[i])\n",
    "            y2.append(y[i])\n",
    "    \n",
    "    return [[k1,b1,abs(np.corrcoef(x1,y1)[0][1])],[k2,b2,abs(np.corrcoef(x2,y2)[0][1])]],(crossx,crossy)\n",
    "\n",
    "\n",
    "def get_3_line(x,y):\n",
    "    perr_min = np.inf\n",
    "    p_best = None\n",
    "    for n in range(100):\n",
    "        k = np.random.rand(6)*20\n",
    "        try:\n",
    "            p,e = optimize.curve_fit(piecewise3, x, y,p0=k)\n",
    "        except:\n",
    "            continue\n",
    "        perr = np.sum(np.abs(y-piecewise3(x, *p)))\n",
    "        if(perr < perr_min):\n",
    "            perr_min = perr\n",
    "            p_best = p\n",
    "\n",
    "    x0,x1,y0,y1,k0,k1= p_best\n",
    "    k1,b1,k2,b2,k3,b3 = (k0,y0-k0*x0,\n",
    "                         (y1-y0)/(x1-x0),y0-x0*(y1-y0)/(x1-x0),\n",
    "                          k1,y1-k1*x1)\n",
    "    \n",
    "    x1,x2,x3,y1,y2,y3 = [],[],[],[],[],[]\n",
    "    \n",
    "    crossx1,crossy1 = (b1-b2)/(k2-k1) , ((b1-b2)/(k2-k1)) *k1 + b1\n",
    "    crossx2,crossy2 = (b3-b2)/(k2-k3) , ((b3-b2)/(k2-k3)) *k3 + b3\n",
    "\n",
    "    for i in range(len(x)):\n",
    "        if x[i] < crossx1:\n",
    "            x1.append(x[i])\n",
    "            y1.append(y[i])\n",
    "        elif x[i] < crossx2:\n",
    "            x2.append(x[i])\n",
    "            y2.append(y[i])\n",
    "        else:\n",
    "            x3.append(x[i])\n",
    "            y3.append(y[i])   \n",
    "            \n",
    "    return [[k1,b1,abs(np.corrcoef(x1,y1)[0][1])],[k2,b2,abs(np.corrcoef(x2,y2)[0][1])],[k3,b3,abs(np.corrcoef(x3,y3)[0][1])]],(crossx1,crossy1),(crossx2,crossy2)\n",
    "\n",
    "def svg_to_emf(svg_figpath):\n",
    "    '''1. 如果是.svg的绝对路径，True改为False；\n",
    "       2. inlscape.exe的文件路径中必须是双斜杠\\\\，单斜杠\\会出错；\n",
    "       3. subprocess.call中的shell=True不可省略，否则会报错。'''\n",
    "\n",
    "    if svg_figpath is not None:\n",
    "        path, svgfigname = os.path.split(svg_figpath)\n",
    "        figname, figform = os.path.splitext(svgfigname)\n",
    "        emf_figpath = os.path.join(path, figname + '.emf')\n",
    "        #print(\"{} {} -T -o {}\".format(inkscape_path, svg_figpath, emf_figpath))\n",
    "        return subprocess.call(\"{} {} -T -o {}\".format(inkscape_path, svg_figpath, emf_figpath),shell = True)\n",
    "        # os.remove(svg_figpath)\n",
    "\n",
    "def read_csv2(tb,E):\n",
    "\n",
    "    tb = np.array(tb)\n",
    "    E = np.array(E)\n",
    "\n",
    "\n",
    "    if min(E)>-5.893*1.8099/2 *5:\n",
    "        a = -5.893*1.8099/2 *5 \n",
    "    elif min(E)>-5.893*1.8099/2 *25:\n",
    "        a = -5.893*1.8099/2 *25\n",
    "    else:\n",
    "        a = -5.893*1.8099/2 *35\n",
    "    if max(E) <= 5.893*1.8099/2 *5 :\n",
    "        if min(E)>-5.893*1.8099/2 *25:\n",
    "            a = -5.893*1.8099/2 *25\n",
    "        else:\n",
    "            a = -5.893*1.8099/2 *35\n",
    "        b = 5.893*1.8099/2 *5\n",
    "        sign_loc = 'lower right'\n",
    "    elif max(E) < 5.893*1.8099/2 *35:\n",
    "        b = 5.893*1.8099/2 *35\n",
    "        sign_loc = loc\n",
    "    elif  max(E) < 5.893*1.8099/2 *75:\n",
    "        b = 5.893*1.8099/2 *75\n",
    "        sign_loc = loc\n",
    "    elif  max(E) < 5.893*1.8099/2 *115:\n",
    "        b = 5.893*1.8099/2 *115\n",
    "        sign_loc = loc\n",
    "    elif max(E) < 5.893*1.8099/2 *175:\n",
    "        b = 5.893*1.8099/2 *175\n",
    "        sign_loc = loc\n",
    "    return tb,E,(a,b),round((b-a)/(5.893*1.8099/2)/10),sign_loc\n",
    "    a = \"\"\"   \n",
    "    if max(E)-min(E) <= 5.893*1.8099*20:\n",
    "        a = min(E) - 5.893*1.8099*10+(max(E)-min(E))/2    \n",
    "        b = max(E) + 5.893*1.8099*10-(max(E)-min(E))/2\n",
    "        a = a - a%(5.893*1.8099/2) - (5.893*1.8099/2)\n",
    "        b = b - b%(5.893*1.8099/2) + (5.893*1.8099/2)\n",
    "        return tb,E,type_dict, (a,b),2\n",
    "    else:\n",
    "        slim = int((max(E)-min(E))/(5.893*1.8099*10))\n",
    "        return tb,E,type_dict, (min(E)-(5.893*1.8099*10),max(E)+(5.893*1.8099*10)),slim+2\"\"\"\n",
    "    ''\n",
    "def read_csv(file_path):\n",
    "    with open(file_path,encoding=\"utf-8\") as f:\n",
    "        csv_reader = csv.reader(f)\n",
    "        tb = []\n",
    "        E = []\n",
    "        type_dict = collections.defaultdict(list)\n",
    "        for ri,row in enumerate(csv_reader):\n",
    "            if ri == 0:\n",
    "                continue\n",
    "            tb.append(float(row[0]))\n",
    "            E.append(float(row[1]))\n",
    "\n",
    "            row_total = sum([float(i) for i in row[2:]])\n",
    "            for i,num in enumerate(row[2:]):\n",
    "                type_dict[i+1].append(float(num)/row_total)\n",
    "    \n",
    "    \n",
    "    tb = np.array(tb)\n",
    "    E = np.array(E)\n",
    "    for i in type_dict[i]:\n",
    "        type_dict[i] = np.array(type_dict[i])\n",
    "\n",
    "    tb = tb - 0.5/2   #调整到各\"自中心点\n",
    "    E = E - (5.893*1.8099*0.5)/2\n",
    "    \n",
    "    \n",
    "    if min(E)>-5.893*1.8099/2 *5:\n",
    "        a = -5.893*1.8099/2 *5 \n",
    "    elif min(E)>-5.893*1.8099/2 *25:\n",
    "        a = -5.893*1.8099/2 *25\n",
    "    else:\n",
    "        a = -5.893*1.8099/2 *35\n",
    "    if max(E) <= 5.893*1.8099/2 *5 :\n",
    "        if min(E)>-5.893*1.8099/2 *25:\n",
    "            a = -5.893*1.8099/2 *25\n",
    "        else:\n",
    "            a = -5.893*1.8099/2 *35\n",
    "        b = 5.893*1.8099/2 *5\n",
    "        sign_loc = 'lower right'\n",
    "    elif max(E) < 5.893*1.8099/2 *35:\n",
    "        b = 5.893*1.8099/2 *35\n",
    "        sign_loc = loc\n",
    "    elif  max(E) < 5.893*1.8099/2 *75:\n",
    "        b = 5.893*1.8099/2 *75\n",
    "        sign_loc = loc\n",
    "    elif  max(E) < 5.893*1.8099/2 *115:\n",
    "        b = 5.893*1.8099/2 *115\n",
    "        sign_loc = loc\n",
    "    elif max(E) < 5.893*1.8099/2 *175:\n",
    "        b = 5.893*1.8099/2 *175\n",
    "        sign_loc = loc\n",
    "    return tb,E,type_dict, (a,b),round((b-a)/(5.893*1.8099/2)/10),sign_loc\n",
    "    a = \"\"\"   \n",
    "    if max(E)-min(E) <= 5.893*1.8099*20:\n",
    "        a = min(E) - 5.893*1.8099*10+(max(E)-min(E))/2    \n",
    "        b = max(E) + 5.893*1.8099*10-(max(E)-min(E))/2\n",
    "        a = a - a%(5.893*1.8099/2) - (5.893*1.8099/2)\n",
    "        b = b - b%(5.893*1.8099/2) + (5.893*1.8099/2)\n",
    "        return tb,E,type_dict, (a,b),2\n",
    "    else:\n",
    "        slim = int((max(E)-min(E))/(5.893*1.8099*10))\n",
    "        return tb,E,type_dict, (min(E)-(5.893*1.8099*10),max(E)+(5.893*1.8099*10)),slim+2\"\"\"\n",
    "    \n",
    "    \n",
    "\n",
    "class LatticeImage:\n",
    "    def __init__(self,csv_path,title,tb_ratio,tb,E):\n",
    "        self.color = [\"y\",'r','darkorchid','g','b','fuchsia','limegreen','lightseagreen','chocolate','deepskyblue','y','#990033','#FF9966','#996699','#FF99CC','#999900','#50616d']\n",
    "        #self.color = [\"r\" for i in self.color]\n",
    "        self.color_dict = {\n",
    "            \"森林\" :\"#0000FF\",\n",
    "            \"高山植被\" :\"#32cd32\",\n",
    "            \"沼泽\" :\"#804000\",\n",
    "            \"草丛\" :\"#FFA500\",\n",
    "            \"灌丛\" :\"#007f00\",\n",
    "            \"草原\" :\"#DC143C\",\n",
    "            \"草甸\" :\"#800080\",\n",
    "            \"荒漠\" :\"#ff00ff\",\n",
    "            }\n",
    "        self.title = title\n",
    "        self.markerstyle = '.'\n",
    "        \n",
    "        self.tb2,self.E2,y_range,yy2,self.sign_loc= read_csv2(tb,E)\n",
    "        \n",
    "        self.tb,self.E,self.type_dict,y_range2,yy,self.sign_loc= read_csv(csv_path)\n",
    "        self.type_num = max(self.type_dict.keys())\n",
    "        self.TB_max,self.TB_min,self.E_max,self.E_min = max(self.tb),min(self.tb),max(self.E),min(self.E)\n",
    "        self.yy = yy2\n",
    "        self.fig= plt.subplots(figsize=(12,yy2*2))\n",
    "        self.ax = plt.gca()\n",
    "        self.ax.xaxis.set_ticks_position('bottom')\n",
    "        self.ax.spines['bottom'].set_position(('data', 0))\n",
    "        self.ax.yaxis.set_ticks_position('left')\n",
    "        self.ax.spines['left'].set_position(('data', 0))\n",
    "        self.ax.spines['right'].set_color('none')\n",
    "        self.ax.spines['top'].set_color('none')\n",
    "        \n",
    "        \n",
    "        poly_text2 = '分区界限'\n",
    "        for i in [2,6,10,14,22]:\n",
    "            self.ax.axvline(x=i,ls=\"--\",c=\"#000000\",linewidth=1,alpha = 0.5)\n",
    "            \n",
    "        self.ax.xaxis.set_ticks([2,6,10,14,22,30])  \n",
    "        self.ax.plot(np.linspace(0, 30, 5), 4*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,label=poly_text2,alpha = 0.5)\n",
    "        self.ax.plot(np.linspace(0, 30, 5), 2*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "        self.ax.plot(np.linspace(0, 30, 5), 5.893*1.8099*np.linspace(0, 30, 5), '--k', linewidth=1,alpha = 0.5)\n",
    "        self.ax.plot(np.linspace(0, 30, 5), (1/3)*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "        #3.4修改： 删除p/pe=3线 self.ax.plot(np.linspace(0, 30, 5), (-1/3)*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "        self.ax.plot(np.linspace(0, 30, 5), (-1/3)*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)    \n",
    "        self.ax.plot(np.linspace(0, 30, 5), -0.5*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "        self.ax.plot(np.linspace(0, 30, 5), (-3/5)*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "        self.ax.plot(np.linspace(0, 30, 5), (-2/3)*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "        self.ax.plot(np.linspace(0, 30, 5), -5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "        \n",
    "        \n",
    "        plt.axhline(0, color='k')#第四区线，p=1/2pe\n",
    "        plt.axhline(0, color='k')#\n",
    "\n",
    "        self.ax.xaxis.grid(True, which='minor',linestyle='--', linewidth=0.5,alpha=0.3)\n",
    "        self.ax.xaxis.grid(True,linestyle='--', linewidth=0.5,alpha=0.3)\n",
    "        self.ax.yaxis.grid(True, which='minor',linestyle='--', linewidth=0.5,alpha=0.3)\n",
    "        self.ax.yaxis.grid(True,linestyle='--', linewidth=0.5,alpha=0.3)\n",
    "        #self.ax.set_xlabel('TB (℃)',fontproperties =font_set)\n",
    "        self.ax.set_ylabel('E',fontproperties =font_set)\n",
    "        \n",
    "        self.ax.xaxis.set_major_locator(MultipleLocator(5))\n",
    "        self.ax.yaxis.set_major_locator(MultipleLocator(5.893*1.8099*0.5*10))\n",
    "        self.ax.xaxis.set_major_formatter(FormatStrFormatter('%d'))\n",
    "        self.ax.yaxis.set_major_formatter(FormatStrFormatter('%1.1f'))\n",
    "        self.ax.xaxis.set_minor_locator(MultipleLocator(0.5))\n",
    "        self.ax.yaxis.set_minor_locator(MultipleLocator(5.893*1.8099*0.5))\n",
    "        self.ax.set_xlim(0,30.0)  #设置坐标取值范围\n",
    "        self.ax.set_ylim(y_range)\n",
    "        plt.draw()\n",
    "        self.y_ticks = [float(i.get_text()) for i in self.ax.yaxis.get_ticklabels()]\n",
    "        \n",
    "        y_range = (self.y_ticks[0],self.y_ticks[-1])\n",
    "        k = self.y_ticks[-1]/30\n",
    "        k_ = self.y_ticks[0]/30\n",
    "        \n",
    "        if k < (4*5.893*1.8099):\n",
    "            plt.text(y_range[1]/(4*5.893*1.8099)-2,y_range[1]+3,\"pe/p=0.25\",fontproperties = font_set)\n",
    "        else:\n",
    "            plt.text(30,30*(4*5.893*1.8099),\"pe/p=0.25\",fontproperties = font_set)\n",
    "            \n",
    "        if k < (2*5.893*1.8099):\n",
    "            plt.text(y_range[1]/(2*5.893*1.8099)-0.8,y_range[1]+3,\"pe/p=0.5\",fontproperties = font_set)\n",
    "        else:\n",
    "            plt.text(30,30*(2*5.893*1.8099),\"pe/p=0.5\",fontproperties = font_set)\n",
    "            \n",
    "        if k < (5.893*1.8099):\n",
    "            plt.text(y_range[1]/(5.893*1.8099)-0.7,y_range[1]+3,\"pe/p=1\",fontproperties = font_set)\n",
    "        else:\n",
    "            plt.text(30,30*(5.893*1.8099),\"pe/p=1\",fontproperties = font_set)\n",
    "            \n",
    "        if k < (1/3)*5.893*1.8099:\n",
    "            plt.text(y_range[1]/((1/3)*5.893*1.8099)-1,y_range[1]+3,\"pe/p=1.5\",fontproperties = font_set)\n",
    "        else:\n",
    "            plt.text(30,30*((1/3)*5.893*1.8099),\"pe/p=1.5\",fontproperties = font_set)     \n",
    "            \n",
    "        plt.text(30,0,\"pe/p=2\\nTB (℃)\",fontproperties = font_set)\n",
    "        \n",
    "        #3.4修改： 删除p/pe=3线\n",
    "        #if k_ > (-1/3)*5.893*1.8099:\n",
    "          #  plt.text(y_range[0]/((-1/3)*5.893*1.8099)-0.7,y_range[0]-3,\"pe/p=3\",fontproperties = font_set)\n",
    "        #else:\n",
    "         #   plt.text(30,30*((-1/3)*5.893*1.8099),\"pe/p=3\",fontproperties = font_set)     \n",
    "        if k_ > -(1/3)*5.893*1.8099:\n",
    "            plt.text(y_range[0]/(-(1/3)*5.893*1.8099)-0.7,y_range[0]-3,\"pe/p=3\",fontproperties = font_set)\n",
    "        else:\n",
    "            plt.text(30,30*(-(1/3)*5.893*1.8099),\"pe/p=3\",fontproperties = font_set)        \n",
    "        if k_ > -0.5*5.893*1.8099:\n",
    "            plt.text(y_range[0]/(-0.5*5.893*1.8099)-0.3,y_range[0]-3,\"pe/p=4\",fontproperties = font_set)\n",
    "        else:\n",
    "            plt.text(30,30*(-0.5*5.893*1.8099),\"pe/p=4\",fontproperties = font_set)     \n",
    "        if k_ > -(3/5)*5.893*1.8099:\n",
    "            plt.text(y_range[0]/(-(3/5)*5.893*1.8099)-0.4,y_range[0]-3,\"pe/p=5\",fontproperties = font_set)\n",
    "        else:\n",
    "            plt.text(30,30*(-(3/5)*5.893*1.8099),\"pe/p=5\",fontproperties = font_set)        \n",
    "        if k_ > -(2/3)*5.893*1.8099:\n",
    "            if y_range[0] > -60:\n",
    "                plt.text(y_range[0]/(-(2/3)*5.893*1.8099)-1.5,y_range[0]-3,\"pe/p=6\",fontproperties = font_set)\n",
    "            else:\n",
    "                plt.text(y_range[0]/(-(2/3)*5.893*1.8099)-0.5,y_range[0]-3,\"pe/p=6\",fontproperties = font_set)\n",
    "        else:\n",
    "            plt.text(30,30*(-(2/3)*5.893*1.8099),\"pe/p=6\",fontproperties = font_set)        \n",
    "\n",
    "        if k_ > -5.893*1.8099:\n",
    "            plt.text(y_range[0]/(-5.893*1.8099)-0.5,y_range[0]-3,\"p=0\",fontproperties = font_set)\n",
    "        else:\n",
    "            plt.text(30,30*(-5.893*1.8099),\"p=0\",fontproperties = font_set)     \n",
    "\n",
    "        ###划分界限的标签\n",
    "        ###划百分比\n",
    "        point_set = [(0.5*i,round(j*(5.893*1.8099*0.5),8)) for j in range(int(y_range[0]/(5.893*1.8099*0.5)),int(y_range[1]/(5.893*1.8099*0.5))) for i in range(0,60)]\n",
    "        tb_e = [(self.tb[i]-0.25,round(self.E[i]-(5.893*1.8099*0.5)/2,8)) for i in range(len(self.tb))]\n",
    "        valid_point_set = list(set(point_set) - set(tb_e))\n",
    "        self.q = point_set\n",
    "        self.p = tb_e\n",
    "        area_dict = {}\n",
    "        area_dict_default = {}\n",
    "        \n",
    "        for i in range(12):\n",
    "            for j in range(7):\n",
    "                area_dict[(i,j)] = []\n",
    "                area_dict_default[(i,j)] = []\n",
    "        area_dict_default[(5,0)] = [[5.5,1]]     \n",
    "        for xy in point_set :\n",
    "            x,y = xy[0],xy[1]\n",
    "            if y>  4*5.893*1.8099* x: a = 0\n",
    "            elif y>  2*5.893*1.8099* x: a = 1\n",
    "            elif y >  5.893*1.8099* x: a = 2\n",
    "            elif y >  (1/3)*5.893*1.8099* x : a = 3    \n",
    "            elif y >= 0: a = 4\n",
    "            elif y >  -(1/3)*5.893*1.8099* x : a = 5\n",
    "            elif y >=  -0.5*5.893*1.8099* x: a = 6\n",
    "            elif y >  -(3/5)*5.893*1.8099* x : a = 7  \n",
    "            elif y >  -(2/3)*5.893*1.8099* x : a = 8  \n",
    "            elif y >=  -5.893*1.8099* x: a = 9\n",
    "            else : a = 10\n",
    "                \n",
    "                \n",
    "            if x <2: b = 0\n",
    "            elif x<6: b = 1\n",
    "            elif x<10: b = 2\n",
    "            elif x<14: b = 3\n",
    "            elif x<22: b = 4\n",
    "            elif x<30: b = 5\n",
    "            area_dict_default[(a,b)].append(xy)\n",
    "                \n",
    "        for xy in valid_point_set :\n",
    "            x,y = xy[0],xy[1]\n",
    "            if y>  4*5.893*1.8099* x: a = 0\n",
    "            elif y>  2*5.893*1.8099* x: a = 1\n",
    "            elif y >  5.893*1.8099* x: a = 2\n",
    "            elif y >  (1/3)*5.893*1.8099* x : a = 3    \n",
    "            elif y >= 0: a = 4\n",
    "            elif y >  -(1/3)*5.893*1.8099* x : a = 5\n",
    "            elif y >=  -0.5*5.893*1.8099* x: a = 6\n",
    "            elif y >  -(3/5)*5.893*1.8099* x : a = 7  \n",
    "            elif y >  -(2/3)*5.893*1.8099* x : a = 8  \n",
    "            elif y >=  -5.893*1.8099* x: a = 9\n",
    "            else : a = 10\n",
    "                \n",
    "                \n",
    "            if x <2: b = 0\n",
    "            elif x<6: b = 1\n",
    "            elif x<10: b = 2\n",
    "            elif x<14: b = 3\n",
    "            elif x<22: b = 4\n",
    "            elif x<30: b = 5\n",
    "            area_dict[(a,b)].append(xy)\n",
    "        self.r3 = tb_ratio\n",
    "        self.r4 = area_dict\n",
    "        self.r5 = area_dict_default\n",
    "        def get_text_location(x,y):\n",
    "            point_list = area_dict[(x,y)]\n",
    "            if not point_list:\n",
    "                point_list = area_dict_default[(x,y)]\n",
    "                return sum([i[0] for i in point_list])/len(point_list),sum([i[1] for i in point_list])/len(point_list)\n",
    "            mean_x = sum([i[0] for i in point_list])/len(point_list)\n",
    "            mean_y = sum([i[1] for i in point_list])/len(point_list)\n",
    "            point_list.sort(key = lambda x : (x[0] - mean_x)**2 + (x[1] - mean_y)**2 )\n",
    "            for i in point_list:\n",
    "                if (i[0]+0.5,i[1]) in point_list:\n",
    "                    return i[0],i[1]\n",
    "\n",
    "            point_list = area_dict_default[(x,y)]\n",
    "            return sum([i[0] for i in point_list])/len(point_list),sum([i[1] for i in point_list])/len(point_list)\n",
    "            \n",
    "        \n",
    "        for i in range(12):\n",
    "            for j in range(7):\n",
    "                if tb_ratio[i][j] != 0 :\n",
    "                    #for e in area_dict[(i,j)]:\n",
    "                       # plt.text(e[0],e[1],str(10*i+j),fontproperties = font_set_2)\n",
    "                    x,y = get_text_location(i,j)\n",
    "                    plt.text(x,y,\"%.2f\"%(tb_ratio[i][j]*100) +\"%\",fontproperties = font_set_2)\n",
    "        \n",
    "        \n",
    "        self.name_dict = {'0': ['森林', 0], '1': ['灌丛', 1], '2': ['草丛', 2], '3': ['草原', 3], '4': ['荒漠', 4], '5': ['草甸', 5], '6': ['沼泽', 6], '7': ['高山植被', 7], '8': ['栽培植被', 8]}\n",
    "        \n",
    "           \n",
    "    def set_color_and_mark(self,color_dict = dict , mark = \".\" ):\n",
    "        self.color_dict = color_dict \n",
    "        self.markerstyle = mark\n",
    "        \n",
    "\n",
    "    def get_xy(self,columns):\n",
    "        index_dict = collections.defaultdict(list)\n",
    "        type_dict_final = type_dict_import\n",
    "        type_index_list = [[] for i in range(9)]\n",
    "        for num,i in enumerate(columns[2:]):\n",
    "            if str(int(i)) in type_dict_final:\n",
    "                type_index_list[type_dict_final[str(int(i))]] .append(num)\n",
    "\n",
    "        new_type_dict = {}\n",
    "        for i in range(1,10):\n",
    "            new_type_dict[i] = [sum([self.type_dict[index+1][j] for index in type_index_list[i-1]]) for j in range(len(self.type_dict[1]))]\n",
    "\n",
    "        self.type_dict  = new_type_dict \n",
    "        columns = [\"\",\"\",] + [str(i+1) for i in range(9)]\n",
    "        for i in range(1,10):\n",
    "            for index,ratio in enumerate(self.type_dict[i]):\n",
    "                if not index_dict[(self.tb[index],self.E[index])]:\n",
    "                    index_dict[(self.tb[index],self.E[index])] = [[],[],[]]\n",
    "\n",
    "                if ratio >= 0.6321:\n",
    "                    index_dict[(self.tb[index],self.E[index])][0].append(str(columns[i+1]))\n",
    "                elif ratio >= 0.3679:\n",
    "                    index_dict[(self.tb[index],self.E[index])][1].append(str(columns[i+1]))\n",
    "                else:\n",
    "                    index_dict[(self.tb[index],self.E[index])][2].append(str(columns[i+1]))\n",
    "\n",
    "        return index_dict\n",
    "    \n",
    "    \n",
    "    def generate_image(self,save_path,columns,line_list,csv_df,max_limit,ii,sign):  \n",
    "        ii = int(ii)\n",
    "        writel = line_list[\"writel\"] \n",
    "        line_list = line_list[\"k_list\"] \n",
    "        index_dict = self.get_xy(columns)\n",
    "        write_dict = collections.defaultdict(list)\n",
    "        for i in index_dict:\n",
    "            if index_dict[i][0]:\n",
    "                write_dict[(tuple(set(index_dict[i][0])),tuple(set(index_dict[i][2])),0)].append(i)\n",
    "            else:\n",
    "                write_dict[(tuple(set(index_dict[i][1])),tuple(set(index_dict[i][2])),1)].append(i)\n",
    "        columns = [\"\",\"\",] + [str(i+1) for i in range(9)]\n",
    "\n",
    "        x = np.linspace(0,max_limit,100)    \n",
    "\n",
    "        \n",
    "        #self.ax.plot(np.mean(csv_nif.tb),np.mean(csv_df.E_sum),\"o\",markersize =1,alpha = 1,c=\"#000000\",label = \"均值点\")\n",
    "        self.ax.axvline(x=np.mean(csv_df.tb),ls=\"--\",c=\"r\",linewidth=0.5,alpha = 0.5)\n",
    "        self.ax.axhline(y=np.mean(csv_df.E_sum),ls=\"--\",c=\"r\",linewidth=0.5,alpha = 0.5)\n",
    "        \n",
    "        ticks = [0,2,6,10,14,22,30]\n",
    "        \n",
    "        self.ax.xaxis.set_ticks(sorted(ticks+ [np.mean(csv_df.tb)]))\n",
    "        self.ax.xaxis.set_ticklabels(sorted(ticks +[round(float(np.mean(csv_df.tb)),2)]))\n",
    "        \n",
    "        red_x = sorted(ticks+ [round(float(np.mean(csv_df.tb)),2)]).index(round(float(np.mean(csv_df.tb)),2))\n",
    "        self.ax.xaxis.get_ticklabels()[red_x].set_color(\"red\")\n",
    "        self.ax.xaxis.get_ticklabels()[red_x].set_alpha(0)\n",
    "        #画线 y范围变动 没写完\n",
    "        ticks = self.y_ticks\n",
    "        is_delete_y_label = -1\n",
    "        if is_delete_y_label >= 0:\n",
    "            ticks[is_delete_y_label] = round(float(np.mean(csv_df.E_sum)),2)\n",
    "            self.ax.yaxis.set_ticks(ticks)\n",
    "            self.ax.yaxis.set_ticklabels(ticks)\n",
    "            red_y = ticks.index(round(float(np.mean(csv_df.E_sum)),2))\n",
    "        else:\n",
    "            self.ax.yaxis.set_ticks(sorted(ticks+ [np.mean(csv_df.E_sum)]))\n",
    "            ticks =  sorted(ticks +[round(float(np.mean(csv_df.E_sum)),2)])\n",
    "            ticklabels = ticks\n",
    "            self.ax.yaxis.set_ticklabels(ticklabels)\n",
    "            red_y = ticks.index(round(float(np.mean(csv_df.E_sum)),2))\n",
    "        \n",
    "        self.ax.yaxis.get_ticklabels()[red_y].set_color(\"red\")\n",
    "        self.ax.yaxis.get_ticklabels()[red_y].set_alpha(0)\n",
    "\n",
    "        plt.legend(prop = font_set,loc = loc)\n",
    "        \n",
    "        temp_store_index = []\n",
    "        for key in write_dict:\n",
    "            if not key[2]:\n",
    "                temp_store_index.append(key)\n",
    "        temp_store_index.sort(key = lambda x: x[0])    \n",
    "        \n",
    "        for key in temp_store_index:\n",
    "            priority = [self.name_dict[str(int(i)-1)] for i in key[0]]\n",
    "            priority.sort(key = lambda x : x[1])\n",
    "            priority = [i[0] for i in priority] \n",
    "            \n",
    "            color = self.color_dict[priority[0]]\n",
    "            \n",
    "            if key[1]:\n",
    "                crisscross = [self.name_dict[str(int(i)-1)] for i in key[1]]\n",
    "                crisscross.sort(key = lambda x : x[1])\n",
    "                crisscross = [i[0] for i in crisscross]\n",
    "                label = \"稳态：  \" + \",\".join(i for i in priority)# + \"\\n混沌态：\" + \",\".join(i for i in crisscross if i != \"栽培植被\")\n",
    "            else:\n",
    "                label = \"稳态：  \" + \",\".join(i for i in priority)\n",
    "            self.ax.plot([i[0] for i in write_dict[key]],[i[1] for i in write_dict[key]], \".\", markerfacecolor='white',color=color, markersize = 12,label=label,markeredgecolor=color,markeredgewidth=0.8,zorder=-100)\n",
    "            plt.legend(prop = font_set,loc = loc)    \n",
    "   \n",
    "\n",
    "\n",
    "        temp_store_index = []    \n",
    "        for key in write_dict:\n",
    "            if key[2] and key[0]: \n",
    "                temp_store_index.append(key)\n",
    "        temp_store_index.sort(key = lambda x: x[0])            \n",
    "\n",
    "        for key in temp_store_index:     \n",
    "            if len(key[0]) == 1:\n",
    "                \n",
    "                priority = [self.name_dict[str(int(i)-1)] for i in key[0]]\n",
    "                priority.sort(key = lambda x : x[1])\n",
    "                priority = [i[0] for i in priority]\n",
    "                color = self.color_dict[priority[0]]\n",
    "                if key[1]:\n",
    "                    crisscross = [self.name_dict[str(int(i)-1)] for i in key[1]]\n",
    "                    crisscross.sort(key = lambda x : x[1])\n",
    "                    crisscross = [i[0] for i in crisscross]\n",
    "                    label = \"亚稳态：\" + \",\".join(i for i in priority) #+ \"\\n混沌态：\" +\",\".join(i for i in crisscross if i != \"栽培植被\")\n",
    "                else:\n",
    "                    label = \"亚稳态：\" + \",\".join(i for i in priority)\n",
    "                #label = \",\".join(self.name_dict[i] for i in key[0]) +\"为优势，和\" + \",\".join(self.name_dict[i] for i in key[1]) +\"的交错类型\"\n",
    "                #pattern = re.compile('.{30}')\n",
    "                #label = '\\n'.join(pattern.findall(label)) + \"\\n\" + label[-(len(label)%30):]\n",
    "                self.ax.plot([i[0] for i in write_dict[key]],[i[1] for i in write_dict[key]], \"^\", color=color, markerfacecolor='white',markersize = 6,label=label,markeredgecolor=color,markeredgewidth=0.8,zorder=-100)\n",
    "                plt.legend(prop = font_set,loc = loc)\n",
    "\n",
    "                \n",
    "        for key in temp_store_index:     \n",
    "            if len(key[0]) == 2:\n",
    "                priority = [self.name_dict[str(int(i)-1)] for i in key[0]]\n",
    "                priority.sort(key = lambda x : x[1])\n",
    "                priority = [i[0] for i in priority]\n",
    "                color = self.color_dict[priority[0]]\n",
    "                if key[1]:\n",
    "                    \n",
    "                    crisscross = [self.name_dict[str(int(i)-1)] for i in key[1]]\n",
    "                    crisscross.sort(key = lambda x : x[1])\n",
    "                    crisscross = [i[0] for i in crisscross]\n",
    "                    label = \"亚稳态：\" + \",\".join(i for i in priority) #+ \"\\n混沌态：\" +\",\".join(i for i in crisscross if i != \"栽培植被\")\n",
    "                else:\n",
    "                    label = \"亚稳态：\" + \",\".join(i for i in priority)\n",
    "                #label = \",\".join(self.name_dict[i] for i in key[0]) +\"为优势，和\" + \",\".join(self.name_dict[i] for i in key[1]) +\"的交错类型\"\n",
    "                #pattern = re.compile('.{30}')\n",
    "                #label = '\\n'.join(pattern.findall(label)) + \"\\n\" + label[-(len(label)%30):]\n",
    "                self.ax.plot([i[0] for i in write_dict[key]],[i[1] for i in write_dict[key]], \"s\", color=color, markerfacecolor='white',markersize = 6,label=label,markeredgecolor=color,markeredgewidth=0.8,zorder=-100)\n",
    "                plt.legend(prop = font_set,loc = loc)\n",
    "\n",
    "        \n",
    "        temp_store_index = []   \n",
    "        for key in write_dict:\n",
    "            if key[2] and not key[0] and key[1]:\n",
    "                temp_store_index.append(key)\n",
    "        temp_store_index.sort(key = lambda x: x[1])            \n",
    "        for key in temp_store_index:     \n",
    "\n",
    "            crisscross = [self.name_dict[str(int(i)-1)] for i in key[1]]\n",
    "            crisscross.sort(key = lambda x : x[1])\n",
    "            crisscross = [i[0] for i in crisscross]\n",
    "\n",
    "            color = self.color_dict[crisscross[0]]\n",
    "            label = \"混沌态\" #+ \",\".join(i for i in crisscross if i != \"栽培植被\")\n",
    "            #pattern = re.compile('.{30}')\n",
    "            #label = \",\".join(self.name_dict[i] for i in key[1]) +\"交错类型\"\n",
    "            #label = '\\n'.join(pattern.findall(label)) + \"\\n\" + label[-(len(label)%30):]\n",
    "            self.ax.plot([i[0] for i in write_dict[key]],[i[1] for i in write_dict[key]], \"D\", markerfacecolor='white',color=\"#FFFF00\", markersize = 4,label=label,markeredgecolor=\"#FFFF00\",markeredgewidth=0.8,zorder=-100)\n",
    "            plt.legend(prop = font_set,loc = loc) \n",
    "\n",
    "\n",
    "        self.ax.scatter(csv_df.tb,csv_df.E_sum,2,alpha =0.5,c=self.color[ii%16],zorder=2,label = save_path.split(\"\\\\\")[-1][:-4])\n",
    "        \n",
    "        self.ax.scatter(np.mean(csv_df.tb),np.mean(csv_df.E_sum),1,marker = \"o\",c=\"#000000\",zorder=3,label = \"均值点\"+\"(%s,%s)\"%(round(np.mean(csv_df.tb),2),round(np.mean(csv_df.E_sum),2)))\n",
    "        \n",
    "        if not sign:\n",
    "            for index,i in enumerate(line_list):\n",
    "                k,b,r2,typei = i[\"k\"],i[\"b\"],i[\"r\"],i[\"type\"]\n",
    "                if typei == \"none\":\n",
    "                        pass\n",
    "                elif typei == \"vertical\":\n",
    "                    plt.vlines(k,-200,888,colors=self.color[ii%16], label = \"TB=%.2f\"%k,linewidth=0.6 )\n",
    "                elif typei == \"up_vertical\":\n",
    "                    plt.vlines(k,b,888,colors=self.color[ii%16], label = \"TB=%.2f\"%k,linewidth=0.6 )\n",
    "                elif typei == \"down_vertical\":\n",
    "                    plt.vlines(k,-200,b,colors=self.color[ii%16], label = \"TB=%.2f\"%k,linewidth=0.6 )\n",
    "                elif typei == \"horizon\":\n",
    "                        x = np.linspace(writel[index][0],writel[index][1],100)   \n",
    "                        plt.plot(x,k*x+b ,c=\"#990000\",label = \"E=%.2f\"%b,linewidth=0.6 )\n",
    "                else:\n",
    "                    x = np.linspace(writel[index][0],writel[index][1],100)    \n",
    "                    plt.plot(x,k*x+b , c=\"#990000\",label = \"E=%.2f*TB+%.2f(R²=%.2f)\"%(k,b,r2),linewidth=0.6 )\n",
    "\n",
    "\n",
    "        plt.legend(prop = font_set,loc = loc)\n",
    "        plt.savefig(save_path, dpi = 900,bbox_inches='tight')\n",
    "        svg_to_emf(save_path)\n",
    "        plt.clf()\n",
    "        plt.close()\n",
    "        \n",
    "\n",
    "        \n",
    "        \n",
    "        \n",
    "class LatticeImageForAll:\n",
    "    def __init__(self,tb,E,title,keyl):\n",
    "        self.key = keyl\n",
    "        self.color = [\"y\",'r','darkorchid','g','b','fuchsia','limegreen','lightseagreen','chocolate','deepskyblue','y','#990033','#FF9966','#996699','#FF99CC','#999900','#50616d']\n",
    "        self.color_dict = {\n",
    "            \"森林\" :\"#0000FF\",\n",
    "            \"高山植被\" :\"#32cd32\",\n",
    "            \"沼泽\" :\"#804000\",\n",
    "            \"草丛\" :\"#FFA500\",\n",
    "            \"灌丛\" :\"#007f00\",\n",
    "            \"草原\" :\"#DC143C\",\n",
    "            \"草甸\" :\"#800080\",\n",
    "            \"荒漠\" :\"#ff00ff\",\n",
    "            }\n",
    "        self.title = title\n",
    "        self.markerstyle = '.'\n",
    "        \n",
    "\n",
    "        if min(E)>-5.893*1.8099/2 *5:\n",
    "            a = -5.893*1.8099/2 *5 \n",
    "        elif min(E)>-5.893*1.8099/2 *25:\n",
    "            a = -5.893*1.8099/2 *25\n",
    "        else:\n",
    "            a = -5.893*1.8099/2 *35\n",
    "        if max(E) <= 5.893*1.8099/2 *5 :\n",
    "            if min(E)>-5.893*1.8099/2 *25:\n",
    "                a = -5.893*1.8099/2 *25\n",
    "            else:\n",
    "                a = -5.893*1.8099/2 *35\n",
    "            b = 5.893*1.8099/2 *5\n",
    "            sign_loc = 'lower right'\n",
    "        elif max(E) < 5.893*1.8099/2 *35:\n",
    "            b = 5.893*1.8099/2 *35\n",
    "            sign_loc = loc\n",
    "        elif  max(E) < 5.893*1.8099/2 *75:\n",
    "            b = 5.893*1.8099/2 *75\n",
    "            sign_loc = loc\n",
    "        elif  max(E) < 5.893*1.8099/2 *115:\n",
    "            b = 5.893*1.8099/2 *115\n",
    "            sign_loc = loc\n",
    "        elif max(E) < 5.893*1.8099/2 *175:\n",
    "            b = 5.893*1.8099/2 *175\n",
    "            sign_loc = loc\n",
    "        self.tb,self.E,y_range,yy,self.sign_loc = tb,E,(a,b),round((b-a)/(5.893*1.8099/2)/7),sign_loc\n",
    "\n",
    "        self.TB_max,self.TB_min,self.E_max,self.E_min = max(self.tb),min(self.tb),max(self.E),min(self.E)\n",
    "        self.yy = yy\n",
    "        self.fig= plt.subplots(figsize=(12,yy*2))\n",
    "        self.ax = plt.gca()\n",
    "        self.ax.xaxis.set_ticks_position('bottom')\n",
    "        self.ax.spines['bottom'].set_position(('data', 0))\n",
    "        self.ax.yaxis.set_ticks_position('left')\n",
    "        self.ax.spines['left'].set_position(('data', 0))\n",
    "        self.ax.spines['right'].set_color('none')\n",
    "        self.ax.spines['top'].set_color('none')\n",
    "        \n",
    "\n",
    "        \n",
    "        poly_text2 = '分区界限'\n",
    "        for i in [2,6,10,14,22]:\n",
    "            self.ax.axvline(x=i,ls=\"--\",c=\"#000000\",linewidth=1,alpha = 0.5)\n",
    "            \n",
    "        self.ax.xaxis.set_ticks([2,6,10,14,22,30])  \n",
    "        self.ax.plot(np.linspace(0, 30, 5), 4*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,label=poly_text2,alpha = 0.5)\n",
    "        self.ax.plot(np.linspace(0, 30, 5), 2*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "        self.ax.plot(np.linspace(0, 30, 5), 5.893*1.8099*np.linspace(0, 30, 5), '--k', linewidth=1,alpha = 0.5)\n",
    "        self.ax.plot(np.linspace(0, 30, 5), (1/3)*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "        #3.4修改： 删除p/pe=3线 self.ax.plot(np.linspace(0, 30, 5), (-1/3)*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "        self.ax.plot(np.linspace(0, 30, 5), (-1/3)*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)    \n",
    "        self.ax.plot(np.linspace(0, 30, 5), -0.5*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "        self.ax.plot(np.linspace(0, 30, 5), (-3/5)*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "        self.ax.plot(np.linspace(0, 30, 5), (-2/3)*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "        self.ax.plot(np.linspace(0, 30, 5), -5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "        \n",
    "        \n",
    "        plt.axhline(0, color='k')#第四区线，p=1/2pe\n",
    "        plt.axhline(0, color='k')# \n",
    "        self.ax.xaxis.grid(True, which='minor',linestyle='--', linewidth=0.5,alpha=0.3)\n",
    "        self.ax.xaxis.grid(True,linestyle='--', linewidth=0.5,alpha=0.3)\n",
    "        self.ax.yaxis.grid(True, which='minor',linestyle='--', linewidth=0.5,alpha=0.3)\n",
    "        self.ax.yaxis.grid(True,linestyle='--', linewidth=0.5,alpha=0.3)\n",
    "        self.ax.set_xlabel('TB (℃)',fontproperties =font_set)\n",
    "        self.ax.set_ylabel('E',fontproperties =font_set)\n",
    "        \n",
    "        self.ax.xaxis.set_major_locator(MultipleLocator(5))\n",
    "        self.ax.yaxis.set_major_locator(MultipleLocator(5.893*1.8099*0.5*5))\n",
    "        self.ax.xaxis.set_major_formatter(FormatStrFormatter('%d'))\n",
    "        self.ax.yaxis.set_major_formatter(FormatStrFormatter('%1.1f'))\n",
    "        self.ax.xaxis.set_minor_locator(MultipleLocator(0.5))\n",
    "        self.ax.yaxis.set_minor_locator(MultipleLocator(5.893*1.8099*0.5))\n",
    "        \n",
    "        ticks = [0,2,6,10,14,22,30]\n",
    "        yt = [999999,4,2,1,1/3,0,-1/3,-0.5,-3/5,-2/3,-1]\n",
    "\n",
    "        xmin,xmax,ymin,ymax = 999999,-999999,999999,-999999\n",
    "        for key in keyl.split(\",\"):\n",
    "            x,y = int(key[0]),int(key[1:])\n",
    "            x1 = np.linspace(ticks[x-1],ticks[x],100) \n",
    "            y1 = 5.893*1.8099*x1*yt[y-1]\n",
    "            y2 = 5.893*1.8099*x1*yt[y]\n",
    "            \n",
    "            \n",
    "            xmin,xmax,ymin,ymax = min(min(x1),xmin),max(max(x1),xmax),min(min(list(y1) + list(y2)),ymin),max(max(list(y1) + list(y2)),ymax)\n",
    "        if ymax >1000:\n",
    "            ymax = max(E)+ 100\n",
    "        self.ax.xaxis.set_ticks([2,6,10,14,22,30])  \n",
    "        self.ax.set_xlim(0,xmax+2)  #设置坐标取值范围\n",
    "        self.xmax = xmax+2\n",
    "        self.ax.set_ylim(min(ymin,-10)-20,max(ymax,10)+20)\n",
    "\n",
    "        plt.draw()\n",
    "        \n",
    "        self.y_ticks = [float(i.get_text()) for i in self.ax.yaxis.get_ticklabels()]\n",
    "        \n",
    "\n",
    "        k =  (max(ymax,10)+20)/(xmax+2)\n",
    "        k_ = (min(ymin,-10)-20)/(xmax+2)\n",
    "        \n",
    "        y_range = (min(ymin,-10)-20,max(ymax,10)+20)\n",
    "\n",
    "        if k < (4*5.893*1.8099):\n",
    "            plt.text((y_range[1]-15)/(4*5.893*1.8099),y_range[1]+1.5,\"pe/p=0.25\",fontproperties = font_set)\n",
    "        else:\n",
    "            plt.text((xmax+2),(xmax+2)*(4*5.893*1.8099),\"pe/p=0.25\",fontproperties = font_set)\n",
    "\n",
    "        if k < (2*5.893*1.8099):\n",
    "            plt.text((y_range[1])/(2*5.893*1.8099),y_range[1]+1.5,\"pe/p=0.5\",fontproperties = font_set)\n",
    "        else:\n",
    "            plt.text((xmax+2),(xmax+2)*(2*5.893*1.8099),\"pe/p=0.5\",fontproperties = font_set)\n",
    "\n",
    "        if k < (5.893*1.8099):\n",
    "            plt.text((y_range[1])/(5.893*1.8099),y_range[1]+1.5,\"pe/p=1\",fontproperties = font_set)\n",
    "        else:\n",
    "            plt.text((xmax+2),(xmax+2)*(5.893*1.8099),\"pe/p=1\",fontproperties = font_set)\n",
    "\n",
    "        if k < (1/3)*5.893*1.8099:\n",
    "            plt.text((y_range[1])/((1/3)*5.893*1.8099),y_range[1]+1.5,\"pe/p=1.5\",fontproperties = font_set)\n",
    "        else:\n",
    "            plt.text((xmax+2),(xmax+2)*((1/3)*5.893*1.8099),\"pe/p=1.5\",fontproperties = font_set)     \n",
    "\n",
    "        plt.text((xmax+2),0,\"pe/p=2\",fontproperties = font_set)\n",
    "\n",
    "        \n",
    "        if k_ > -(1/3)*5.893*1.8099:\n",
    "            plt.text((y_range[0])/(-(1/3)*5.893*1.8099),y_range[0]-1.5,\"pe/p=3\",fontproperties = font_set)\n",
    "        else:\n",
    "            plt.text((xmax+2),(xmax+2)*(-(1/3)*5.893*1.8099),\"pe/p=3\",fontproperties = font_set)        \n",
    "        if k_ > -0.5*5.893*1.8099:\n",
    "            plt.text((y_range[0])/(-0.5*5.893*1.8099)+0.5,y_range[0]-1.5,\"pe/p=4\",fontproperties = font_set)\n",
    "        else:\n",
    "            plt.text((xmax+2),(xmax+2)*(-0.5*5.893*1.8099),\"pe/p=4\",fontproperties = font_set)     \n",
    "        if k_ > -(3/5)*5.893*1.8099:\n",
    "            plt.text((y_range[0])/(-(3/5)*5.893*1.8099),y_range[0]-1.5,\"pe/p=5\",fontproperties = font_set)\n",
    "        else:\n",
    "            plt.text((xmax+2),(xmax+2)*(-(3/5)*5.893*1.8099),\"pe/p=5\",fontproperties = font_set)   \n",
    "        if k_ > -(2/3)*5.893*1.8099:\n",
    "            if y_range[0] > -35:\n",
    "                plt.text(y_range[0]/(-(2/3)*5.893*1.8099)-1,y_range[0]-1.5,\"pe/p=6\",fontproperties = font_set)\n",
    "            else:\n",
    "                plt.text((y_range[0])/(-(2/3)*5.893*1.8099),y_range[0]-1.5,\"pe/p=6\",fontproperties = font_set)\n",
    "        else:\n",
    "            plt.text((xmax+2),(xmax+2)*(-(2/3)*5.893*1.8099),\"pe/p=6\",fontproperties = font_set)        \n",
    "\n",
    "        if k_ > -5.893*1.8099:\n",
    "            plt.text((y_range[0]-1.5)/(-5.893*1.8099)-1,y_range[0]-1.5,\"p=0\",fontproperties = font_set)\n",
    "        else:\n",
    "            plt.text((xmax+2),(xmax+2)*(-5.893*1.8099),\"p=0\",fontproperties = font_set) \n",
    "\n",
    "    def generate_image(self,save_path,numbers):  \n",
    "        ticks = [i for i in [0,2,6,10,14,22,30] if i <=self.xmax]\n",
    "        self.ax.xaxis.set_ticks(ticks)\n",
    "        self.ax.xaxis.set_ticklabels(sorted(ticks))\n",
    "        keyl = self.key\n",
    "        ticks = [0,2,6,10,14,22,30]\n",
    "        yt = [999999,4,2,1,1/3,0,-1/3,-0.5,-3/5,-2/3,-1]\n",
    "        ii = 1\n",
    "        self.ax.plot(self.tb,self.E,\"o\",markersize =4,alpha = 1,c=\"#000000\",label = \"均值点\" ,zorder=102)\n",
    "        \n",
    "        \n",
    "        \n",
    "        ban_loc_list = [[self.tb[i],self.E[i]] for i in range(len(self.tb))]\n",
    "\n",
    "\n",
    "        def reject_clash(x,y,banlist):\n",
    "            x1 = (x-0.45,x-0.15)\n",
    "            x2 = (x-0.15,x+0.15)\n",
    "            x3 = (x+0.15,x+0.45)\n",
    "            y1 = (y-2.25,y-0.75)\n",
    "            y2 = (y-0.75,y+0.75)\n",
    "            y3 = (y+0.75,y+2.25)\n",
    "            loc = [\n",
    "                    \"right middle\",\n",
    "                \"right upper\",\n",
    "                    \"right lower\",\n",
    "                    \"middle upper\",\n",
    "                    \"middle lower\",\n",
    "                    \"left upper\",\n",
    "                    \"left middle\",\n",
    "                    \"left lower\"]\n",
    "            u1,u2 = [i[0] for i in ban_loc_list]   , [i[1] for i in ban_loc_list]  \n",
    "            chosen_loc = {\"right upper\" :[x3,y3],\n",
    "                        \"right middle\" :[x3,y2],\n",
    "                        \"right lower\" :[x3,y1],\n",
    "                        \"middle upper\" :[x2,y3],\n",
    "                        \"middle lower\" :[x2,y1],\n",
    "                        \"left upper\" :[x1,y3],\n",
    "                        \"left middle\" :[x1,y2],\n",
    "                        \"left lower\" :[x1,y1]}\n",
    "            \n",
    "            loc_dict = {\"right upper\" :[0.1,1],\n",
    "                        \"right middle\" :[0.1,-0.3],\n",
    "                        \"right lower\" :[0.1,-2.5],\n",
    "                        \"middle upper\" :[-0.1,1],\n",
    "                        \"middle lower\" :[-0.1,-2.5],\n",
    "                        \"left upper\" :[-0.3,1],\n",
    "                        \"left middle\" :[-0.3,-0.3],\n",
    "                        \"left lower\" :[-0.3,-2.5]}\n",
    "            \n",
    "            for i in banlist:\n",
    "                x4,y4 = i\n",
    "                for j in chosen_loc:\n",
    "                \n",
    "                    if chosen_loc[j][0][0]<x4<chosen_loc[j][0][1] and chosen_loc[j][1][0]<y4<chosen_loc[j][1][1]:\n",
    "                        del chosen_loc[j]\n",
    "                        break\n",
    "        \n",
    "        \n",
    "        \n",
    "            if chosen_loc:\n",
    "                for i in loc:\n",
    "                    if i in chosen_loc:\n",
    "                        return x+loc_dict[i][0],y+loc_dict[i][1]\n",
    "            else:\n",
    "                return x+0.1,y+1\n",
    "            \n",
    "        for i in range(len(self.tb)): \n",
    "            x,y= reject_clash(self.tb[i],self.E[i],ban_loc_list)\n",
    "            ban_loc_list.append([x,y])\n",
    "            ban_loc_list.append([x+0.3,y+1.5])\n",
    "            ban_loc_list.append([x+0.3,y])\n",
    "            ban_loc_list.append([x,y+1.5])\n",
    "            plt.text(x,y,numbers[i],fontproperties = font_set_2,zorder=102)\n",
    "            \n",
    "            \n",
    "            \n",
    "        #u1,u2 = [i[0] for i in ban_loc_list]   , [i[1] for i in ban_loc_list]   \n",
    "        #self.ax.plot(u1,u2,\"x\",markersize =4,alpha = 1,c=\"r\",label = \"均值点\" ,zorder=105)    \n",
    "            \n",
    "        for key in keyl.split(\",\"):\n",
    "            x,y = int(key[0]),int(key[1:])\n",
    "\n",
    "            x1 = np.linspace(ticks[x-1],ticks[x],100) \n",
    "\n",
    "            y1 = 5.893*1.8099*x1*yt[y-1]\n",
    "            y2 = 5.893*1.8099*x1*yt[y]\n",
    "\n",
    "            self.ax.plot(x1,y1,alpha = 1,c=\"r\",zorder=100)\n",
    "            self.ax.plot(x1,y2,alpha = 1,c=\"r\",zorder=100)\n",
    "\n",
    "\n",
    "            d1,d2,d3,d4 = 5.893*1.8099*ticks[x-1]*yt[y-1],5.893*1.8099*ticks[x-1]*yt[y],5.893*1.8099*ticks[x]*yt[y-1],5.893*1.8099*ticks[x]*yt[y]\n",
    "\n",
    "            self.ax.vlines(ticks[x-1],min(d1,d2),max(d1,d2),colors=\"r\",zorder=100)\n",
    "\n",
    "            self.ax.vlines(ticks[x],min(d3,d4),max(d3,d4),colors=\"r\",zorder=100)\n",
    "       \n",
    "        plt.savefig(save_path + \".svg\",format = \"svg\",bbox_inches='tight')\n",
    "        svg_to_emf(save_path+ \".svg\")\n",
    "        plt.clf()\n",
    "        plt.close()\n",
    "\n",
    "        \n",
    "# -*- coding: utf-8 -*-\n",
    "\"\"\"\n",
    "1.0.0 格子图remake 自动寻求最优多段拟合方案，速度加快\n",
    "\n",
    "\"\"\"\n",
    "\n",
    "import csv\n",
    "import time\n",
    "import os\n",
    "import gc\n",
    "import pandas as pd\n",
    "import shutil\n",
    "import collections\n",
    "import pandas as pd\n",
    "import csv\n",
    "from PIL import Image\n",
    "import subprocess\n",
    "import numpy as np\n",
    "import matplotlib.pylab as plt\n",
    "from matplotlib.ticker import MultipleLocator\n",
    "from matplotlib.ticker import FormatStrFormatter\n",
    "from sklearn.linear_model import LinearRegression \n",
    "from constant import type_dict_import\n",
    "from matplotlib.font_manager import FontProperties\n",
    "import matplotlib.pylab as plt\n",
    "from settings import poly_path,List,loc,save_path,gis_csv_path,area_csv_path,团簇,垂直水平,inkscape_path,指定类型\n",
    "from matplotlib.font_manager import FontProperties\n",
    "font_set = FontProperties(fname=r'C:\\windows\\fonts\\simsun.ttc',size=12)\n",
    "font_set2 = FontProperties(fname=r'C:\\windows\\fonts\\simsun.ttc',size=8)\n",
    "font_set_2 = FontProperties(fname=r'C:\\windows\\fonts\\simsun.ttc',size=8,weight =\"bold\")\n",
    "\n",
    "img_save_path = save_path\n",
    "try:\n",
    "    os.mkdir(save_path+ \"\\\\csv\")\n",
    "except:\n",
    "    pass\n",
    "name2 = List.split(\"_\")[-1] + \"_\" + List.split(\"_\")[-2]\n",
    "total = 0\n",
    "\n",
    "rows=[]\n",
    "\n",
    "csv_number=0\n",
    "\n",
    "##########\n",
    "\n",
    "df = pd.read_csv(gis_csv_path,encoding = \"gbk\" ,dtype = {\"num\": object})\n",
    "type_csv_path = []\n",
    "for root,dirs,files in os.walk(poly_path):        \n",
    "    for file in files:            \n",
    "        if \".csv\" in os.path.join(root,file) and \"信息统计\" not in os.path.join(root,file):\n",
    "            type_csv_path.append(os.path.join(root,file))\n",
    "release_csv_list = []   \n",
    "for i in range(len(df)):\n",
    "    for j in type_csv_path:\n",
    "        if j.endswith(df[\"key\"][i]+\".csv\"):   \n",
    "            shutil.copyfile(j,save_path+\"\\\\csv\"+\"\\\\\"+str(df[\"num\"][i])+\".csv\")\n",
    "            release_csv_list.append([save_path+\"\\\\csv\"+\"\\\\\"+str(df[\"num\"][i])+\".csv\",df[\"key\"][i]])\n",
    "\n",
    "getcolor_dict = {}\n",
    "for i in range(len(df)):\n",
    "    getcolor_dict[df.num[i]] = df.key[i].split(\"_\")[0].split(\".\")[-1]\n",
    "#生成k_dict\n",
    "\n",
    "#########\n",
    "\n",
    "area_csv_list = []\n",
    "for root,dirs,files in os.walk(area_csv_path):        \n",
    "    for file in files:            \n",
    "        area_csv_list.append(os.path.join(root,file))\n",
    "\n",
    "\n",
    "            \n",
    "tempr = ['温度交错带','极地苔原带','寒温带','中温带','暖温带','亚热带','热带']\n",
    "\n",
    "release_csv_list"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "013e6822",
   "metadata": {},
   "source": [
    "# 占比csv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "7c96d168",
   "metadata": {},
   "outputs": [],
   "source": [
    "total = {}\n",
    "for i in release_csv_list:\n",
    "    dic = {}\n",
    "    csv1,key = i\n",
    "    df = pd.read_csv(csv1)\n",
    "    for j in range(len(df)):\n",
    "        x,y = df[\"tb\"][j],df[\"E_sum\"][j]\n",
    "        if y>  4*5.893*1.8099* x: a = 0\n",
    "        elif y>  2*5.893*1.8099* x: a = 1\n",
    "        elif y >  5.893*1.8099* x: a = 2\n",
    "        elif y >  (1.0/3)*5.893*1.8099* x : a = 3    \n",
    "        elif y >= 0: a = 4\n",
    "        elif y >  -(1.0/3)*5.893*1.8099* x : a = 5\n",
    "        elif y >=  -0.5*5.893*1.8099* x: a = 6\n",
    "        elif y >  -(3.0/5)*5.893*1.8099* x : a = 7  \n",
    "        elif y >  -(2.0/3)*5.893*1.8099* x : a = 8  \n",
    "        elif y >=  -5.893*1.8099* x: a = 9\n",
    "        else : a = 10\n",
    "\n",
    "        if x <2: b = 0\n",
    "        elif x<6: b = 1\n",
    "        elif x<10: b = 2\n",
    "        elif x<14: b = 3\n",
    "        elif x<22: b = 4\n",
    "        elif x<30: b = 5\n",
    "        g  = 100*(b+1) + a+1\n",
    "        if g not in dic:\n",
    "            dic[g] = 1\n",
    "        else:\n",
    "            dic[g] += 1\n",
    "    num = sum([dic[g] for g in dic])\n",
    "    c = [[str(a),round(dic[a]/num,5)] for a in dic]\n",
    "    c.sort(key = lambda x : x[1],reverse = True)\n",
    "    if c[0][1] > 0.6321:statu = \"稳态\"\n",
    "    elif c[0][1] > 0.3679:\n",
    "        if c[1][1] > 0.3679:\n",
    "            statu = \"双亚稳态\"\n",
    "        else:\n",
    "            statu = \"单亚稳态\"\n",
    "    else:\n",
    "        statu = \"混沌态\"\n",
    "    total[csv1.split(\"\\\\\")[-1][:-4]] = [statu,num ]+ sum(c,[])\n",
    "    \n",
    "with open((save_path + \"\\\\123.csv\"),'w',newline = \"\") as f_c_csv:\n",
    "    writer = csv.writer(f_c_csv)\n",
    "    writer.writerow([\"群丛编号\",\"群丛状态\",\"总点数\"])\n",
    "    for key in total:\n",
    "        writer.writerow([key] + total[key]) "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c267ceff",
   "metadata": {},
   "source": [
    "# 格子图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "f1244951",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "E:\\oo\\lab\\123\\csv\\4.5-1-2.csv\n"
     ]
    }
   ],
   "source": [
    "dfc = pd.read_csv(gis_csv_path,encoding = \"gbk\" ,dtype = {\"num\": object})\n",
    "key_num = {}\n",
    "for i in range(len(dfc)):\n",
    "    key_num[dfc.key[i]] = dfc.num[i]\n",
    "for a in release_csv_list:\n",
    "    csv1,key = a\n",
    "    if 指定类型 and csv1.split(\"\\\\\")[-1][:-4] not in 指定类型:\n",
    "        continue\n",
    "    print(csv1)\n",
    "    if \"_\" in key:\n",
    "        keyword = \"_\"+\"-\".join(tempr[int(i)] for i in key.split(\"_\")[-1].split(\".\")) + \"交错带\"\n",
    "    else:\n",
    "        keyword =  \"_\"+ tempr[int(key.split(\".\")[0])] +  \"_\"\n",
    "    area = \"地域\" + key.split(\".\")[1] + \".\"\n",
    "    \n",
    "    files = [i for i in area_csv_list if keyword in i and area in i]\n",
    "    if len(files) < 1:\n",
    "        print(key,\"没有找到地域csv\")\n",
    "        continue\n",
    "    elif len(files) > 1:\n",
    "        print(key,\"太多地域csv\")\n",
    "        continue\n",
    "    new_area = csv1.split(\"\\\\\")[-1][:-4]\n",
    "    团簇_sign = False\n",
    "    if new_area in 团簇:\n",
    "        团簇_sign = True\n",
    "    title = \"群丛\" + csv1.split(\"\\\\\")[-1][:-4]\n",
    "    df = pd.read_csv(csv1,engine = \"python\")\n",
    "    \n",
    "    if key_num[key] in 垂直水平:\n",
    "        rg,keyword = 垂直水平[key_num[key]][\"分界点\"],垂直水平[key_num[key]][\"拟合方式\"]\n",
    "        k_dict = auto_curve(df,rg,keyword)\n",
    "    else:\n",
    "        k_dict = auto_curve(df,[],None)\n",
    "    max_limit = 30\n",
    "    e = ExecuteCsv_rewrite(files,name2 + \" \" + title,\"\",img_save_path) \n",
    "    e.set_save_path(img_save_path + \"\\\\格子图\")      \n",
    "    e.start_execute(name2 + \" \" + title,csv1,max_limit,k_dict,df.tb,df.E_sum,团簇_sign)\n",
    "    gc.collect() \n",
    "    \n",
    "\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "55147f75",
   "metadata": {},
   "source": [
    "# 群丛分布图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "e97a6e58",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------\n",
      "请确保以下文件都在群系文件夹中\n",
      "如有缺漏会导致中断：\n",
      "0.1.0.1_3.4.5.csv\n",
      "0.1.0.1_4.5.csv\n",
      "0.1.0.2_4.5.csv\n",
      "3.1.0.1.csv\n",
      "3.2.0.1.csv\n",
      "3.2.0.2.csv\n",
      "3.3.0.1.csv\n",
      "3.3.0.2.csv\n",
      "3.3.0.3.csv\n",
      "3.3.0.4.csv\n",
      "4.1.0.1.csv\n",
      "4.1.0.2.csv\n",
      "4.2.0.1.csv\n",
      "4.2.0.2.csv\n",
      "4.2.0.3.csv\n",
      "4.3.0.1.csv\n",
      "4.3.0.2.csv\n",
      "4.3.0.3.csv\n",
      "4.3.0.4.csv\n",
      "5.1.0.1.csv\n",
      "--------------------\n",
      "\n",
      "缺少csv:\n",
      "3.1.0.1|3.2.0.1|3.2.0.2|\n",
      "缺少csv:\n",
      "3.3.0.1|3.3.0.2|3.3.0.3|3.3.0.4|\n",
      "缺少csv:\n",
      "4.1.0.1|4.1.0.2|4.2.0.1|4.2.0.2|4.2.0.3|4.3.0.3|\n",
      "缺少csv:\n",
      "4.3.0.1|\n",
      "缺少csv:\n",
      "4.3.0.4|\n",
      "缺少csv:\n",
      "5.1.0.1|\n",
      "end\n"
     ]
    }
   ],
   "source": [
    "\n",
    "dfc = pd.read_csv(gis_csv_path,encoding = \"gbk\" ,dtype = {\"num\": object})\n",
    "print(\"--------------------\\n请确保以下文件都在群系文件夹中\\n如有缺漏会导致中断：\")\n",
    "for i in dfc.key:\n",
    "    print(i + \".csv\")\n",
    "print(\"--------------------\\n\")\n",
    "tb_ppe_dict = {}\n",
    "for i in range(len(dfc)):\n",
    "    if dfc.tb_ppe[i] not in tb_ppe_dict:\n",
    "        tb_ppe_dict[dfc.tb_ppe[i]] = [dfc.num[i]]\n",
    "    else:\n",
    "        tb_ppe_dict[dfc.tb_ppe[i]].append(dfc.num[i])\n",
    "\n",
    "\n",
    "for i in tb_ppe_dict:\n",
    "\n",
    "    tb_means = []\n",
    "    E_means = []\n",
    "    \n",
    "    for index,a in enumerate(release_csv_list):\n",
    "        csv1 = a[0]\n",
    "        if csv1.split(\"\\\\\")[-1][:-4] not in tb_ppe_dict[i]:continue\n",
    "        df = pd.read_csv(csv1,engine = \"python\")\n",
    "        tb_means.append(np.mean(df.tb))\n",
    "        E_means.append(np.mean(df.E_sum))\n",
    "    if not tb_means:\n",
    "        print(\"缺少csv:\" )\n",
    "        for c in range(len(dfc)):\n",
    "            if dfc.num[c] in tb_ppe_dict[i]:\n",
    "                print(dfc.key[c],end = \"|\")\n",
    "        print()\n",
    "        continue\n",
    "    e = LatticeImageForAll(tb_means,E_means,name2 + \" 群丛分布\"+str(i),str(i))\n",
    "    e.generate_image(img_save_path + \"\\\\格子图\\\\群丛分布\"+str(i),tb_ppe_dict[i])\n",
    "print(\"end\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "1dc4834f",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\python\\lib\\site-packages\\ipykernel_launcher.py:17: UserWarning: color is redundantly defined by the 'color' keyword argument and the fmt string \"--k\" (-> color='k'). The keyword argument will take precedence.\n",
      "  app.launch_new_instance()\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1200x1800 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from PIL import Image\n",
    "import subprocess\n",
    "import numpy as np\n",
    "import matplotlib.pylab as plt\n",
    "\n",
    "\n",
    "\n",
    "fig= plt.subplots(figsize=(12,18))\n",
    "ax = plt.gca()\n",
    "ax.xaxis.set_ticks_position('bottom')\n",
    "ax.spines['bottom'].set_position(('data', 0))\n",
    "ax.yaxis.set_ticks_position('left')\n",
    "ax.spines['left'].set_position(('data', 0))\n",
    "ax.spines['right'].set_color('none')\n",
    "ax.spines['top'].set_color('none')\n",
    "ax.xaxis.set_ticks([2,6,10,14,22,30])  \n",
    "ax.plot(np.linspace(0, 30, 5), 4*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5,c = \"g\")\n",
    "ax.plot(np.linspace(0, 30, 5), 2*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "ax.plot(np.linspace(0, 30, 5), 5.893*1.8099*np.linspace(0, 30, 5), '--k', linewidth=1,alpha = 0.5)\n",
    "ax.plot(np.linspace(0, 30, 5), (1/3)*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "#3.4修改： 删除p/pe=3线 ax.plot(np.linspace(0, 30, 5), (-1/3)*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "ax.plot(np.linspace(0, 30, 5), (-1/3)*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)    \n",
    "ax.plot(np.linspace(0, 30, 5), -0.5*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "ax.plot(np.linspace(0, 30, 5), (-3/5)*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "ax.plot(np.linspace(0, 30, 5), (-2/3)*5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "ax.plot(np.linspace(0, 30, 5), -5.893*1.8099*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "\n",
    "\n",
    "\n",
    "#for i in range(-10,10):\n",
    "    #ax.plot(np.linspace(0, 30, 5), 5.893 * 8* i + 5.893*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "    #ax.plot(np.linspace(0, 30, 5), 5.893 * 8* i -5.893*np.linspace(0, 30, 5), '--k',linewidth=1,alpha = 0.5)\n",
    "ax.xaxis.set_ticklabels([])\n",
    "ax.yaxis.set_ticklabels([])\n",
    "ax.set_ylim(-4*8*5.893,17*8*5.893+0.1)\n",
    "\n",
    "plt.savefig(\"123.png\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d3d056a1",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
